// 微信小程序相关工具函数

/**
 * 获取微信登录凭证
 * @returns {Promise<Object>} 登录凭证
 */
export const getWechatLoginCode = () => {
  return new Promise((resolve, reject) => {
    // #ifdef MP-WEIXIN
    uni.login({
      provider: 'weixin',
      success: (res) => {
        if (res.code) {
          resolve(res)
        } else {
          reject(new Error('获取登录凭证失败'))
        }
      },
      fail: (error) => {
        console.error('微信登录失败:', error)
        reject(new Error('微信登录失败'))
      }
    })
    // #endif
    
    // #ifndef MP-WEIXIN
    // 开发环境返回模拟登录凭证
    if (process.env.NODE_ENV === 'development') {
      setTimeout(() => {
        resolve({
          code: 'mock_code_' + Date.now(),
          errMsg: 'login:ok'
        })
      }, 300)
    } else {
      reject(new Error('当前环境不支持微信登录'))
    }
    // #endif
  })
}

/**
 * 获取用户信息（新版本兼容）
 * @returns {Promise<Object>} 用户信息
 */
export const getWechatUserProfile = () => {
  return new Promise((resolve, reject) => {
    // #ifdef MP-WEIXIN
    // 先尝试使用 getUserInfo（新版本推荐）
    uni.getUserInfo({
      success: (res) => {
        if (res.userInfo) {
          resolve(res)
        } else {
          reject(new Error('获取用户信息失败'))
        }
      },
      fail: (error) => {
        console.error('getUserInfo失败，尝试使用getUserProfile:', error)
        // 如果 getUserInfo 失败，尝试使用 getUserProfile（需要用户授权）
        uni.getUserProfile({
          desc: '用于完善用户资料',
          success: (res) => {
            if (res.userInfo) {
              resolve(res)
            } else {
              reject(new Error('获取用户信息失败'))
            }
          },
          fail: (profileError) => {
            console.error('getUserProfile也失败:', profileError)
            if (profileError.errMsg && profileError.errMsg.includes('auth deny')) {
              reject(new Error('用户拒绝授权'))
            } else if (profileError.errMsg && profileError.errMsg.includes('can only be invoked by user TAP gesture')) {
              reject(new Error('请点击按钮进行授权'))
            } else {
              reject(new Error('获取用户信息失败'))
            }
          }
        })
      }
    })
    // #endif
    
    // #ifndef MP-WEIXIN
    // 开发环境返回模拟数据
    if (process.env.NODE_ENV === 'development') {
      setTimeout(() => {
        resolve({
          userInfo: {
            nickName: '开发测试用户',
            avatarUrl: '/static/icons/default-avatar.svg',
            gender: 1,
            city: '深圳',
            province: '广东',
            country: '中国'
          }
        })
      }, 500)
    } else {
      reject(new Error('当前环境不支持获取微信用户信息'))
    }
    // #endif
  })
}

/**
 * 检查微信授权状态
 * @returns {Promise<Object>} 授权状态
 */
export const checkWechatAuth = () => {
  return new Promise((resolve, reject) => {
    // #ifdef MP-WEIXIN
    uni.getSetting({
      success: (res) => {
        resolve(res.authSetting)
      },
      fail: (error) => {
        console.error('检查授权状态失败:', error)
        reject(new Error('检查授权状态失败'))
      }
    })
    // #endif
    
    // #ifndef MP-WEIXIN
    // 开发环境返回模拟授权状态
    if (process.env.NODE_ENV === 'development') {
      setTimeout(() => {
        resolve({
          'scope.userInfo': true,
          'scope.userLocation': false
        })
      }, 100)
    } else {
      reject(new Error('当前环境不支持检查微信授权'))
    }
    // #endif
  })
}

/**
 * 打开授权设置页面
 */
export const openWechatAuthSetting = () => {
  return new Promise((resolve, reject) => {
    // #ifdef MP-WEIXIN
    uni.openSetting({
      success: (res) => {
        resolve(res.authSetting)
      },
      fail: (error) => {
        console.error('打开设置页面失败:', error)
        reject(new Error('打开设置页面失败'))
      }
    })
    // #endif
    
    // #ifndef MP-WEIXIN
    reject(new Error('当前环境不支持打开微信设置'))
    // #endif
  })
}

/**
 * 微信登录流程（简化版，不获取用户信息）
 * @returns {Promise<Object>} 登录结果
 */
export const wechatLoginFlow = async () => {
  try {
    // 只获取登录凭证，不获取用户信息
    const loginRes = await getWechatLoginCode()
    
    return {
      code: loginRes.code,
      userInfo: {
        nickName: '微信用户',
        avatarUrl: '/static/icons/default-avatar.svg',
        gender: 0,
        city: '',
        province: '',
        country: ''
      }
    }
  } catch (error) {
    console.error('微信登录流程失败:', error)
    throw error
  }
}

/**
 * 微信授权登录流程（需要用户点击触发）
 * @returns {Promise<Object>} 登录结果
 */
export const wechatAuthLoginFlow = async () => {
  try {
    // 1. 获取登录凭证
    const loginRes = await getWechatLoginCode()
    
    // 2. 尝试获取用户信息（可能失败）
    let userInfo = {
      nickName: '微信用户',
      avatarUrl: '/static/icons/default-avatar.svg',
      gender: 0,
      city: '',
      province: '',
      country: ''
    }
    
    try {
      const userProfileRes = await getWechatUserProfile()
      userInfo = userProfileRes.userInfo
    } catch (error) {
      console.warn('获取用户信息失败，使用默认信息:', error.message)
      // 不抛出错误，使用默认用户信息继续登录
    }
    
    return {
      code: loginRes.code,
      userInfo: userInfo
    }
  } catch (error) {
    console.error('微信授权登录流程失败:', error)
    throw error
  }
}

/**
 * 格式化微信用户信息
 * @param {Object} userInfo - 微信用户信息
 * @returns {Object} 格式化后的用户信息
 */
export const formatWechatUserInfo = (userInfo) => {
  return {
    nickName: userInfo.nickName || '',
    avatarUrl: userInfo.avatarUrl || '',
    gender: userInfo.gender || 0,
    city: userInfo.city || '',
    province: userInfo.province || '',
    country: userInfo.country || ''
  }
}